package com.baizhi.controller;

import com.baizhi.common.Constants;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.UUID;

@Controller
@RequestMapping("file")
public class FileLoad {
    @RequestMapping("upload")
    public void upload(MultipartFile cover) throws IOException {
        //文件上传  添加MultipartFile类型的形参  形参名cover与页面上传文件名的name保持一致
        //1、获取原文件名 添加UUID变成新文件名
        String newFileName = UUID.randomUUID().toString()+cover.getOriginalFilename();
        //2、调用springMVC框架提供的transferTo方法实现文件上传
        //参数是一个File对象  new File（上传文件保存的路径，上传后文件的名字）
        cover.transferTo(new File(Constants.IMG_PATH,newFileName));
    }
    @RequestMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        //文件下载
        //1、设置响应头部信息
        //第一个参数content-disposition标明响应的内容类型
        // 其值attachment表示是以附件的形式响应  默认的是直接响应到页面上
        //后面的filename"+ URLEncoder.encode("测试.jpg","UTF-8")  是设置文件下载后的名字  以及防止中文名乱码的
        response.setHeader("content-disposition","attachment;filename="
                + URLEncoder.encode("测试.jpg","UTF-8"));
        //2、利用文件复制工具类  实现文件的下载（下载和上传都是文件复制）
        //其中：第一个参数表示要下载的文件new File(Constants.IMG_PATH,"000.jpg")
        //                      其中Constants.IMG_PATH表示要下载（复制）文件的路径
        //                          000.jpg  表示要下载（复制）文件的名字
        //第二个参数response.getOutputStream() 将文件以字节输出流响应到页面  表示下载文件的方式（以响应头设置为准）
        FileUtils.copyFile(new File(Constants.IMG_PATH,"000.jpg"),response.getOutputStream());
    }
}
